package com.xcy.quickhand.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @author xcy
 * @version V1.0
 * @description
 * @date 2023/2/11 20:27
 */
@NoArgsConstructor
@Data
public class A {

    @JsonProperty("data")
    private DataDTO data;

    @NoArgsConstructor
    @Data
    public static class DataDTO {
        @JsonProperty("visionProfilePhotoList")
        private VisionProfilePhotoListDTO visionProfilePhotoList;

        @NoArgsConstructor
        @Data
        public static class VisionProfilePhotoListDTO {
            @JsonProperty("result")
            private Integer result;
            @JsonProperty("llsid")
            private String llsid;
            @JsonProperty("webPageArea")
            private String webPageArea;
            @JsonProperty("feeds")
            private List<FeedsDTO> feeds;
            @JsonProperty("hostName")
            private Object hostName;
            @JsonProperty("pcursor")
            private String pcursor;
            @JsonProperty("__typename")
            private String typename;

            @NoArgsConstructor
            @Data
            public static class FeedsDTO {
                @JsonProperty("type")
                private Integer type;
                @JsonProperty("author")
                private AuthorDTO author;
                @JsonProperty("photo")
                private PhotoDTO photo;
                @JsonProperty("canAddComment")
                private Integer canAddComment;
                @JsonProperty("llsid")
                private String llsid;
                @JsonProperty("status")
                private Integer status;
                @JsonProperty("currentPcursor")
                private String currentPcursor;
                @JsonProperty("tags")
                private Object tags;
                @JsonProperty("__typename")
                private String typename;

                @NoArgsConstructor
                @Data
                public static class AuthorDTO {
                    @JsonProperty("id")
                    private String id;
                    @JsonProperty("name")
                    private String name;
                    @JsonProperty("headerUrl")
                    private String headerUrl;
                    @JsonProperty("following")
                    private Boolean following;
                    @JsonProperty("headerUrls")
                    private Object headerUrls;
                    @JsonProperty("__typename")
                    private String typename;
                }

                @NoArgsConstructor
                @Data
                public static class PhotoDTO {
                    @JsonProperty("id")
                    private String id;
                    @JsonProperty("duration")
                    private Integer duration;
                    @JsonProperty("caption")
                    private String caption;
                    @JsonProperty("originCaption")
                    private String originCaption;
                    @JsonProperty("likeCount")
                    private String likeCount;
                    @JsonProperty("viewCount")
                    private String viewCount;
                    @JsonProperty("realLikeCount")
                    private Integer realLikeCount;
                    @JsonProperty("coverUrl")
                    private String coverUrl;
                    @JsonProperty("photoUrl")
                    private String photoUrl;
                    @JsonProperty("photoH265Url")
                    private String photoH265Url;
                    @JsonProperty("manifest")
                    private ManifestDTO manifest;
                    @JsonProperty("manifestH265")
                    private ManifestH265DTO manifestH265;
                    @JsonProperty("videoResource")
                    private VideoResourceDTO videoResource;
                    @JsonProperty("coverUrls")
                    private Object coverUrls;
                    @JsonProperty("timestamp")
                    private Long timestamp;
                    @JsonProperty("expTag")
                    private String expTag;
                    @JsonProperty("animatedCoverUrl")
                    private String animatedCoverUrl;
                    @JsonProperty("distance")
                    private Object distance;
                    @JsonProperty("videoRatio")
                    private Double videoRatio;
                    @JsonProperty("liked")
                    private Boolean liked;
                    @JsonProperty("stereoType")
                    private Integer stereoType;
                    @JsonProperty("profileUserTopPhoto")
                    private Boolean profileUserTopPhoto;
                    @JsonProperty("musicBlocked")
                    private Object musicBlocked;
                    @JsonProperty("__typename")
                    private String typename;

                    @NoArgsConstructor
                    @Data
                    public static class ManifestDTO {
                        @JsonProperty("version")
                        private String version;
                        @JsonProperty("businessType")
                        private Integer businessType;
                        @JsonProperty("mediaType")
                        private Integer mediaType;
                        @JsonProperty("videoId")
                        private String videoId;
                        @JsonProperty("hideAuto")
                        private Boolean hideAuto;
                        @JsonProperty("manualDefaultSelect")
                        private Boolean manualDefaultSelect;
                        @JsonProperty("stereoType")
                        private Integer stereoType;
                        @JsonProperty("adaptationSet")
                        private List<AdaptationSetDTO> adaptationSet;
                        @JsonProperty("playInfo")
                        private PlayInfoDTO playInfo;
                        @JsonProperty("videoFeature")
                        private VideoFeatureDTO videoFeature;

                        @NoArgsConstructor
                        @Data
                        public static class PlayInfoDTO {
                            @JsonProperty("cdnTimeRangeLevel")
                            private Integer cdnTimeRangeLevel;
                        }

                        @NoArgsConstructor
                        @Data
                        public static class VideoFeatureDTO {
                            @JsonProperty("blurProbability")
                            private Double blurProbability;
                            @JsonProperty("blockyProbability")
                            private Double blockyProbability;
                            @JsonProperty("avgEntropy")
                            private Double avgEntropy;
                            @JsonProperty("mosScore")
                            private Double mosScore;
                        }

                        @NoArgsConstructor
                        @Data
                        public static class AdaptationSetDTO {
                            @JsonProperty("id")
                            private Integer id;
                            @JsonProperty("duration")
                            private Integer duration;
                            @JsonProperty("representation")
                            private List<RepresentationDTO> representation;

                            @NoArgsConstructor
                            @Data
                            public static class RepresentationDTO {
                                @JsonProperty("id")
                                private Integer id;
                                @JsonProperty("url")
                                private String url;
                                @JsonProperty("backupUrl")
                                private List<String> backupUrl;
                                @JsonProperty("maxBitrate")
                                private Integer maxBitrate;
                                @JsonProperty("avgBitrate")
                                private Integer avgBitrate;
                                @JsonProperty("width")
                                private Integer width;
                                @JsonProperty("height")
                                private Integer height;
                                @JsonProperty("frameRate")
                                private Integer frameRate;
                                @JsonProperty("quality")
                                private Double quality;
                                @JsonProperty("qualityType")
                                private String qualityType;
                                @JsonProperty("qualityLabel")
                                private String qualityLabel;
                                @JsonProperty("featureP2sp")
                                private Boolean featureP2sp;
                                @JsonProperty("hidden")
                                private Boolean hidden;
                                @JsonProperty("disableAdaptive")
                                private Boolean disableAdaptive;
                                @JsonProperty("defaultSelect")
                                private Boolean defaultSelect;
                                @JsonProperty("comment")
                                private String comment;
                                @JsonProperty("hdrType")
                                private Integer hdrType;
                                @JsonProperty("fileSize")
                                private Integer fileSize;
                                @JsonProperty("bitratePattern")
                                private List<Integer> bitratePattern;
                            }
                        }
                    }

                    @NoArgsConstructor
                    @Data
                    public static class ManifestH265DTO {
                        @JsonProperty("version")
                        private String version;
                        @JsonProperty("businessType")
                        private Integer businessType;
                        @JsonProperty("mediaType")
                        private Integer mediaType;
                        @JsonProperty("videoId")
                        private String videoId;
                        @JsonProperty("hideAuto")
                        private Boolean hideAuto;
                        @JsonProperty("manualDefaultSelect")
                        private Boolean manualDefaultSelect;
                        @JsonProperty("stereoType")
                        private Integer stereoType;
                        @JsonProperty("adaptationSet")
                        private List<AdaptationSetDTO> adaptationSet;
                        @JsonProperty("playInfo")
                        private PlayInfoDTO playInfo;
                        @JsonProperty("videoFeature")
                        private VideoFeatureDTO videoFeature;

                        @NoArgsConstructor
                        @Data
                        public static class PlayInfoDTO {
                            @JsonProperty("cdnTimeRangeLevel")
                            private Integer cdnTimeRangeLevel;
                        }

                        @NoArgsConstructor
                        @Data
                        public static class VideoFeatureDTO {
                            @JsonProperty("blurProbability")
                            private Double blurProbability;
                            @JsonProperty("blockyProbability")
                            private Double blockyProbability;
                            @JsonProperty("avgEntropy")
                            private Double avgEntropy;
                            @JsonProperty("mosScore")
                            private Double mosScore;
                        }

                        @NoArgsConstructor
                        @Data
                        public static class AdaptationSetDTO {
                            @JsonProperty("id")
                            private Integer id;
                            @JsonProperty("duration")
                            private Integer duration;
                            @JsonProperty("representation")
                            private List<RepresentationDTO> representation;

                            @NoArgsConstructor
                            @Data
                            public static class RepresentationDTO {
                                @JsonProperty("id")
                                private Integer id;
                                @JsonProperty("url")
                                private String url;
                                @JsonProperty("backupUrl")
                                private List<String> backupUrl;
                                @JsonProperty("maxBitrate")
                                private Integer maxBitrate;
                                @JsonProperty("avgBitrate")
                                private Integer avgBitrate;
                                @JsonProperty("width")
                                private Integer width;
                                @JsonProperty("height")
                                private Integer height;
                                @JsonProperty("frameRate")
                                private Integer frameRate;
                                @JsonProperty("quality")
                                private Double quality;
                                @JsonProperty("qualityType")
                                private String qualityType;
                                @JsonProperty("qualityLabel")
                                private String qualityLabel;
                                @JsonProperty("featureP2sp")
                                private Boolean featureP2sp;
                                @JsonProperty("hidden")
                                private Boolean hidden;
                                @JsonProperty("disableAdaptive")
                                private Boolean disableAdaptive;
                                @JsonProperty("defaultSelect")
                                private Boolean defaultSelect;
                                @JsonProperty("comment")
                                private String comment;
                                @JsonProperty("hdrType")
                                private Integer hdrType;
                                @JsonProperty("fileSize")
                                private Integer fileSize;
                            }
                        }
                    }

                    @NoArgsConstructor
                    @Data
                    public static class VideoResourceDTO {
                        @JsonProperty("h264")
                        private H264DTO h264;
                        @JsonProperty("hevc")
                        private HevcDTO hevc;

                        @NoArgsConstructor
                        @Data
                        public static class H264DTO {
                            @JsonProperty("version")
                            private String version;
                            @JsonProperty("businessType")
                            private Integer businessType;
                            @JsonProperty("mediaType")
                            private Integer mediaType;
                            @JsonProperty("videoId")
                            private String videoId;
                            @JsonProperty("hideAuto")
                            private Boolean hideAuto;
                            @JsonProperty("manualDefaultSelect")
                            private Boolean manualDefaultSelect;
                            @JsonProperty("stereoType")
                            private Integer stereoType;
                            @JsonProperty("adaptationSet")
                            private List<AdaptationSetDTO> adaptationSet;
                            @JsonProperty("playInfo")
                            private PlayInfoDTO playInfo;
                            @JsonProperty("videoFeature")
                            private VideoFeatureDTO videoFeature;

                            @NoArgsConstructor
                            @Data
                            public static class PlayInfoDTO {
                                @JsonProperty("cdnTimeRangeLevel")
                                private Integer cdnTimeRangeLevel;
                            }

                            @NoArgsConstructor
                            @Data
                            public static class VideoFeatureDTO {
                                @JsonProperty("blurProbability")
                                private Double blurProbability;
                                @JsonProperty("blockyProbability")
                                private Double blockyProbability;
                                @JsonProperty("avgEntropy")
                                private Double avgEntropy;
                                @JsonProperty("mosScore")
                                private Double mosScore;
                            }

                            @NoArgsConstructor
                            @Data
                            public static class AdaptationSetDTO {
                                @JsonProperty("id")
                                private Integer id;
                                @JsonProperty("duration")
                                private Integer duration;
                                @JsonProperty("representation")
                                private List<RepresentationDTO> representation;

                                @NoArgsConstructor
                                @Data
                                public static class RepresentationDTO {
                                    @JsonProperty("id")
                                    private Integer id;
                                    @JsonProperty("url")
                                    private String url;
                                    @JsonProperty("backupUrl")
                                    private List<String> backupUrl;
                                    @JsonProperty("maxBitrate")
                                    private Integer maxBitrate;
                                    @JsonProperty("avgBitrate")
                                    private Integer avgBitrate;
                                    @JsonProperty("width")
                                    private Integer width;
                                    @JsonProperty("height")
                                    private Integer height;
                                    @JsonProperty("frameRate")
                                    private Integer frameRate;
                                    @JsonProperty("quality")
                                    private Double quality;
                                    @JsonProperty("qualityType")
                                    private String qualityType;
                                    @JsonProperty("qualityLabel")
                                    private String qualityLabel;
                                    @JsonProperty("featureP2sp")
                                    private Boolean featureP2sp;
                                    @JsonProperty("hidden")
                                    private Boolean hidden;
                                    @JsonProperty("disableAdaptive")
                                    private Boolean disableAdaptive;
                                    @JsonProperty("defaultSelect")
                                    private Boolean defaultSelect;
                                    @JsonProperty("comment")
                                    private String comment;
                                    @JsonProperty("hdrType")
                                    private Integer hdrType;
                                    @JsonProperty("fileSize")
                                    private Integer fileSize;
                                    @JsonProperty("bitratePattern")
                                    private List<Integer> bitratePattern;
                                }
                            }
                        }

                        @NoArgsConstructor
                        @Data
                        public static class HevcDTO {
                            @JsonProperty("version")
                            private String version;
                            @JsonProperty("businessType")
                            private Integer businessType;
                            @JsonProperty("mediaType")
                            private Integer mediaType;
                            @JsonProperty("videoId")
                            private String videoId;
                            @JsonProperty("hideAuto")
                            private Boolean hideAuto;
                            @JsonProperty("manualDefaultSelect")
                            private Boolean manualDefaultSelect;
                            @JsonProperty("stereoType")
                            private Integer stereoType;
                            @JsonProperty("adaptationSet")
                            private List<AdaptationSetDTO> adaptationSet;
                            @JsonProperty("playInfo")
                            private PlayInfoDTO playInfo;
                            @JsonProperty("videoFeature")
                            private VideoFeatureDTO videoFeature;

                            @NoArgsConstructor
                            @Data
                            public static class PlayInfoDTO {
                                @JsonProperty("cdnTimeRangeLevel")
                                private Integer cdnTimeRangeLevel;
                            }

                            @NoArgsConstructor
                            @Data
                            public static class VideoFeatureDTO {
                                @JsonProperty("blurProbability")
                                private Double blurProbability;
                                @JsonProperty("blockyProbability")
                                private Double blockyProbability;
                                @JsonProperty("avgEntropy")
                                private Double avgEntropy;
                                @JsonProperty("mosScore")
                                private Double mosScore;
                            }

                            @NoArgsConstructor
                            @Data
                            public static class AdaptationSetDTO {
                                @JsonProperty("id")
                                private Integer id;
                                @JsonProperty("duration")
                                private Integer duration;
                                @JsonProperty("representation")
                                private List<RepresentationDTO> representation;

                                @NoArgsConstructor
                                @Data
                                public static class RepresentationDTO {
                                    @JsonProperty("id")
                                    private Integer id;
                                    @JsonProperty("url")
                                    private String url;
                                    @JsonProperty("backupUrl")
                                    private List<String> backupUrl;
                                    @JsonProperty("maxBitrate")
                                    private Integer maxBitrate;
                                    @JsonProperty("avgBitrate")
                                    private Integer avgBitrate;
                                    @JsonProperty("width")
                                    private Integer width;
                                    @JsonProperty("height")
                                    private Integer height;
                                    @JsonProperty("frameRate")
                                    private Integer frameRate;
                                    @JsonProperty("quality")
                                    private Double quality;
                                    @JsonProperty("qualityType")
                                    private String qualityType;
                                    @JsonProperty("qualityLabel")
                                    private String qualityLabel;
                                    @JsonProperty("featureP2sp")
                                    private Boolean featureP2sp;
                                    @JsonProperty("hidden")
                                    private Boolean hidden;
                                    @JsonProperty("disableAdaptive")
                                    private Boolean disableAdaptive;
                                    @JsonProperty("defaultSelect")
                                    private Boolean defaultSelect;
                                    @JsonProperty("comment")
                                    private String comment;
                                    @JsonProperty("hdrType")
                                    private Integer hdrType;
                                    @JsonProperty("fileSize")
                                    private Integer fileSize;
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
